/*
项目中要有404中间件的处理 + 异常报错的中间件
日志记录功能：希望统计用户数量/请求次数/攻击 容易去分析
    logs/api.log中
    
*/

/*
前端做哪些功能？
1.注册
    表单 - post方式提交 - 接收注册成功或失败的消息
    请求方式：post
    请求路径：/api/users/register
    请求参数：
        用户名 - username=值
        密码 - password=值
        邮箱 - email=值
    接收到响应的数据，判断是否成功，做出对应的操作

后端如何对前端做出响应？
1.处理注册请求
    请求路径 - /api/users - 中间件交给router处理
    router.post()
    接收post数据
    判断数据库中是否有当前提交的用户名
        有
            给前端响应消息 - 用户名被占用
        没有
            将提交来的数据存入数据库中
                成功
                    给前端响应消息 - 注册成功
                失败
                    给前端响应消息 - 注册失败
                    
*/

/*
2.登录
前端
    表单 - 提交给服务器 - 消息
    请求方法：post
    请求路径：/api/users/login
    请求参数：
        username=值
        password=值
后端
    处理请求 - 响应消息
    
*/

/*
3.查询用户信息 - 前提：登录状态才能访问个人信息
前端
    get请求服务器 - 获取当前用户的所有信息 - 展示页面
    请求方式：get
    请求路径：/api/users/getUsers?_id=asdfasfd
    请求参数：
        _id: 用户的_id
后端
    处理请求 - 查询数据库中用户信息 - 响应给前端
    查询数据库中用户信息
    userModel.findOne({_id: 'ASDFASDFasdfasdf'})

    后端考虑到用户信息的安全性问题：
        1.需要确保这个用户是登录状态
        2.确保这次请求是合理的

    解决办法：
        用户在登录的时候，给他颁发令牌(藏着我们服务器特有信息/用户的信息/这个令牌的有效期)

        当某些请求需要确保用户是登录的，合理的 - 让这次请求将令牌拿过来，服务器对令牌做验证 - 看看是否我们之前给他颁发

    用户登录成功制造令牌并响应给前端
        let token = jwt.sign({username: '', startTime: '', expires: ''}, '随机字符串')

    用户需要验证是否登录时
        验证是否携带令牌
        req.headers.authorization
        验证令牌是否正确
        解密，看看是否能解开
        验证令牌是否有效
        判断时间
*/


/*
获取商品信息
前端
    发请求 -  - 接收当前页的商品数据
    请求路径：/api/goods/getAllGoods
    请求方法：get
    请求参数：
        当前页：page = 值
后端
    处理请求
*/